package dp;

/***********************************************************************
 * Module:  Usuario.java
 * Author:  Pamela Simbana
 * Purpose: Defines the Class UsuarioDP
 ***********************************************************************/
import java.util.*;
import java.sql.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import md.UsuarioMD;

public class UsuarioDP {

    private int codigoUsuario;
    private int suscripcionUsuario;
    private String nombreUsuario;
    private String nicknameUsuario;
    private String claveUsuario;
    private String fechaIngresoUsuario;
    private UsuarioMD usuarioMD = new UsuarioMD();
    public SuscripcionDP suscripcionDP;
    public CuentaDP[] cuentaDP;

    /**
     * Constructor vacio.
     * Settea los atributos a los valores por defecto
     */
    public UsuarioDP() {
        this.codigoUsuario = -1;
        this.nombreUsuario = "";
        this.nicknameUsuario = "usuario";
        this.claveUsuario = "1234";
        this.fechaIngresoUsuario = "";
        this.usuarioMD = new UsuarioMD();
    }

    /**
     * Metodo que decide si actualizar o ingresar un registro.
     *
     * @return Devuelve TRUE si es que se guarda correctamente el registro en
     * la BDD.
     */
    public boolean guardar() {
        boolean retorno = false;

        if (!this.usuarioMD.verificarUsuarioMD()) {
            retorno = ingresarUsuarioDP();
        } else {
            retorno = modificarUsuarioDP();
        }
       System.out.println(retorno);
        return retorno;
    }

    /**
     * Metodo para ingresar un nuevo usuario en el sistema.
     *
     * @return Devuelve TRUE si es que se ingresa correctamente el registro en
     * la BDD.
     */
    public boolean ingresarUsuarioDP() {

        boolean retorno = false;
        setDatosMd();
        retorno = this.usuarioMD.ingresarUsuarioMD();


        return retorno;

    }

    /** Metodo para modificar los datos del Usuario
     * @return Devuelve TRUE si es que se modifica correctamente el registro en
     * la BDD.*/
    public boolean modificarUsuarioDP() {
        boolean retorno = false;

        setDatosMd();
        retorno = this.usuarioMD.modificarUsuarioMD();

        return retorno;
    }

    /** Metodo para eliminar un Usuario del sistema
     * @return Devuelve TRUE si es que se elimina correctamente el registro en
     * la BDD.
     */
    public boolean eliminarUsuarioDP() {
        boolean retorno = false;

        this.usuarioMD.setCodigoUsuario(this.codigoUsuario);
        retorno = this.usuarioMD.eliminarUsuarioMD();

        return retorno;
    }

    /** Metodo para la consulta general
     *@return Devuelve ResultSet con los datos de los usuarios ingresados
     * en la BDD. */
    public List getListUsuarios() {

        return this.usuarioMD.consultarUsuarioMD();
    }

    /*Metodo para verificar la existencia de un usuario
     * @return Devuelve TRUE si el usuario existe en
     * la BDD. */
    public boolean verificarUsuarioDP() {
        boolean retorno = false;
        this.usuarioMD.setCodigoUsuario(this.codigoUsuario);
        retorno = usuarioMD.verificarUsuarioMD();
        return retorno;
    }

    /*Metodo para verificar el login y contrasena del usuario
     * @return Devuelve TRUE si los datos son correctos de
     * la BDD. */
    public boolean validarIngresoUsuarioDP() {
        boolean retorno = false;
        this.usuarioMD.setNicknameUsuario(this.nicknameUsuario);
        this.usuarioMD.setClaveUsuario(this.claveUsuario);
        retorno = usuarioMD.validarIngresoUsuarioMD();
        if (retorno) {
            this.codigoUsuario = usuarioMD.getCodigoUsuario();
            this.nombreUsuario = usuarioMD.getNombreUsuario();
        }
        return retorno;
    }

    /** @pdOid 9c572080-9c48-4ca1-98af-bd880b06d3b9 */
    public String[] regresarDatos() {

        this.usuarioMD.setCodigoUsuario(this.codigoUsuario);
        return this.usuarioMD.regresarDatos();

    }

    public String obtenerFechaIngreso() {
        String fecha = "";
        SimpleDateFormat formateador = new SimpleDateFormat("dd'/'MMMM'/'yyyy");
        Calendar cal = Calendar.getInstance();
        cal.setTimeZone(TimeZone.getDefault());
        System.out.print(formateador.format(new Date()));
        return formateador.format(new Date());
    }

    /***************************************
     * Getters & Setters
     ***************************************/
    public int getCodigoUsuario() {
        return codigoUsuario;
    }

    public int getSuscripcionUsuario() {
        return suscripcionUsuario;
    }

    public String getNombreUsuario() {
        return nombreUsuario;
    }

    public String getNicknameUsuario() {
        return nicknameUsuario;
    }

    public String getClaveUsuario() {
        return claveUsuario;
    }

    public String getFechaIngresoUsuario() {
        return fechaIngresoUsuario;
    }

    public void setCodigoUsuario(int newCodigoUsuario) {
        codigoUsuario = newCodigoUsuario;
    }

    public void setSuscripcionUsuario(int newSuscripcionUsuario) {
        suscripcionUsuario = newSuscripcionUsuario;
    }

    public void setNombreUsuario(String newNombreUsuario) {
        nombreUsuario = newNombreUsuario;
    }

    public void setNicknameUsuario(String newNicknameUsuario) {
        nicknameUsuario = newNicknameUsuario;
    }

    public void setClaveUsuario(String newClaveUsuario) {
        claveUsuario = newClaveUsuario;
    }

    public void setFechaIngresoUsuario(String newFechaIngresoUsuario) {
        fechaIngresoUsuario = newFechaIngresoUsuario;
    }

    /*Metodo para setear los datos al ingreso */
    public void setDatosMd() {

        this.fechaIngresoUsuario = obtenerFechaIngreso();
        this.usuarioMD.setCodigoUsuario(this.codigoUsuario);
        this.usuarioMD.setSuscripcionUsuario(this.suscripcionUsuario);
        this.usuarioMD.setNombreUsuario(this.nombreUsuario);
        this.usuarioMD.setNicknameUsuario(this.nicknameUsuario);
        this.usuarioMD.setClaveUsuario(this.claveUsuario);
        this.usuarioMD.setFechaIngresoUsuario(this.fechaIngresoUsuario);
    }
}
